package cn.zyq.charging.order.rabbitmq;

import cn.zyq.charging.order.config.RabbitMQConfiguration;
import cn.zyq.charging.order.pojo.po.OrderMQPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import static cn.zyq.charging.order.config.RabbitMQConfiguration.ORDER_ROUTING_KEY;
import static cn.zyq.charging.order.config.RabbitMQConfiguration.ORDER_EXCHANGE_NAME_DIRECT;

//订单给设备发送充电指令， 设备执行充电指令成功，给订单返回状态数据，
//然后订单发送一条消息道RabbitMQ。 用来监控订单是否超时(超过最大的充电时长)
//如果此消息没有超时且被正常消费，则证明是一个正常的充电过程结束， 就将订单状态持久化为充电完成状态，并记录结束时间。
//如果此消息超时且没有被消费，则证明充电操作异常， 就将订单状态持久化为异常完成状态，并记录结束时间。
@Slf4j
@Component
public class RabbitMQOrderProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送消息(消息是orderNO)到正常的订单队列
     * 假定：正常的订单队列没有消费者，同时消息设置了生存时间
     * 超过生存时间消息过期后， 消息会转发到死信队列。
     *
     */
    public void sendOrderMsg(OrderMQPO orderMQPO){
        rabbitTemplate.convertAndSend(ORDER_EXCHANGE_NAME_DIRECT,  ORDER_ROUTING_KEY,orderMQPO);
    }

}
